home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / crt / sun3.md / RCS / fpcrtInt.h,v < prev    next >
Text File  |  1988-06-19  |  4KB  |  203 lines

  1. head     1.1;
  2. access   ;
  3. symbols  ;
  4. locks    ; strict;
  5. comment  @ * @;
  6.  
  7.  
  8. 1.1
  9. date     88.06.19.14.35.37;  author ouster;  state Exp;
  10. branches ;
  11. next     ;
  12.  
  13.  
  14. desc
  15. @@
  16.  
  17.  
  18.  
  19. 1.1
  20. log
  21. @Initial revision
  22. @
  23. text
  24. @/*      @@(#)fpcrtdefs.h 1.1 86/09/24 SMI      */
  25.  
  26. /*
  27.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  28.  */
  29.  
  30. #include "DEFSInt.h"
  31.  
  32. #define ENTER(f) .globl f ; f:
  33. #define OBSOLETE(f) ENTER(f)         
  34. /* Obsolete entry points, remove in next release. */
  35. #define RTOBSOLETE(f) RTENTRY(f)     
  36.  
  37. /*
  38. /* typedef enum fp_switch_type {
  39. /*    fp_unspecified, /* Floating point unit not specified yet. */
  40. /*       fp_software,    /* Floating point performed in software. */
  41. /*       fp_skyffp,      /* Floating point performed on Sky FFP. */
  42. /*       fp_mc68881,     /* Floating point performed on Motorola 68881. */
  43. /*       fp_sunfpa       /* Floating point performed on Sun FPA. */
  44. /*       } ;
  45. */
  46. #define FP_UNSPECIFIED    0     
  47. #define FP_SOFTWARE    1     
  48. #define FP_SKYFFP    2     
  49. #define FP_MC68881    3     
  50. #define FP_SUNFPA    4     
  51.  
  52. /*
  53.        Structure of a V... entry point:
  54. Vxxx:  jsr     V_switch:L
  55.        .long   Fxxx    software     gets translated to jmp Fxxx:L
  56.        .long   Sxxx    Sky ffp board    gets translated to jmp Sxxx:L
  57.        .long   Mxxx    Motorola 68881 or emulator
  58.        .long   Wxxx    Sun FPA board    gets translated to jmp Wxxx:L
  59. */
  60.  
  61. #define VOFFSET 2
  62. #define FOFFSET 6
  63. #define SOFFSET 10
  64. #define MOFFSET 14
  65. #define WOFFSET 18
  66.  
  67. #define VECTORED(f) \
  68.     .data    ; \
  69. ENTER(V/**/f) ; \
  70.     jsr    V_switch:L ; \
  71.     .long    F/**/f,S/**/f,M/**/f,W/**/f
  72.  
  73. #define VECTOR(f,g) \
  74.     .data    ; \
  75. OBSOLETE(g) ; \
  76. ENTER(V/**/f) ; \
  77.     jsr    V_switch:L ; \
  78.     .long    F/**/f,S/**/f,M/**/f,W/**/f
  79.  
  80. /*    Entries to convert between C parameter convention and Vxxx convention. */
  81.  
  82. #define CVDTOD(f,g) \
  83.     ENTER(_/**/f) ; \
  84.     moveml     sp@@(4),d0/d1 ; \
  85.     jmp     V/**/g/**/d
  86.  
  87. #define CVDDTOD(f,g) \
  88.     ENTER(_/**/f) ; \
  89.     moveml     sp@@(4),d0/d1 ; \
  90.     lea    sp@@(12),a0 ; \
  91.     jmp     V/**/g/**/d
  92.  
  93. #define VCDTOD(f) \
  94.     ENTER(f) ; \
  95.     moveml    d0/d1,sp@@- ; \
  96.         jsr        _C/**/f ; \
  97.         addql   #8,sp ; \
  98.         rts
  99.  
  100. #define VCDDTOD(f) \
  101.     ENTER(f) ; \
  102.     movel    a0@@(4),sp@@- ; \
  103.     movel    a0@@,sp@@- ; \
  104.     moveml    d0/d1,sp@@- ; \
  105.         jsr        _C/**/f ; \
  106.         addl    #16,sp ; \
  107.         rts
  108.  
  109. #define CVVDTOD(f) \
  110.         ENTER(__v/**/f/**/d) ; \
  111.         moveml  sp@@(4),d0/d1 ; \
  112.         jmp     V/**/f/**/d
  113.  
  114. #define CVVDDTOD(f) \
  115.         ENTER(__v/**/f/**/d) ; \
  116.         moveml  sp@@(4),d0/d1 ; \
  117.         lea     sp@@(12),a0 ; \
  118.         jmp     V/**/f/**/d
  119.  
  120. /*    Entries to convert between Fortran parameter convention and Vxxx convention. */
  121.  
  122. #define VFSTOS(x) \
  123.     ENTER(x) ; \
  124.     movel    d0,sp@@- ; \
  125.         pea    sp@@ ; \
  126.     jsr        _F/**/x/**/_ ; \
  127.         addql    #8,sp ; \
  128.         rts
  129.  
  130. #define VFSSTOS(x) \
  131.     ENTER(x) ; \
  132.     moveml    d0/d1,sp@@- ; \
  133.     pea    sp@@(4) ; \
  134.     pea    sp@@(4) ; \
  135.         jsr        _F/**/x/**/_ ; \
  136.         addl    #16,sp ; \
  137.         rts
  138.  
  139. #define VFDTOD(x) \
  140.     ENTER(x) ; \
  141.     moveml    d0/d1,sp@@- ; \
  142.         pea    sp@@ ; \
  143.     jsr        _F/**/x/**/_ ; \
  144.         addl    #12,sp ; \
  145.         rts
  146.  
  147. #define VFDDTOD(x) \
  148.     ENTER(x) ; \
  149.     moveml    d0/d1,sp@@- ; \
  150.     pea    a0@@ ; \
  151.     pea    sp@@(4) ; \
  152.         jsr        _F/**/x/**/_ ; \
  153.         addl    #16,sp ; \
  154.         rts
  155.  
  156. /*    Floating point condition codes, as in movew    #FLT,cc      */
  157.  
  158. #define FEQ    4    /* Z bit */
  159. #define    FLT    25    /* XNC bits */
  160. #define FGT    0    /* no bits */
  161. #define    FUN    2    /* V bit */
  162.  
  163. /*    Floating point modes and status. */
  164.  
  165. /*
  166.  *      Rounding Direction
  167.  */
  168.  
  169. #define ROUNDMASK ~0x30
  170.  
  171. #define RNEAREST   0
  172. #define RZERO   0x10
  173. #define RMINUS  0x20
  174. #define RPLUS   0x30
  175.  
  176. /*
  177.  *      Rounding Precision
  178.  */
  179.  
  180. #define ROUNDTODOUBLE 0x80    /* 68881 rounding precision corresponding to F/S/W */
  181.  
  182. /* 
  183.  *    Jump Table Equates - all odd and negative
  184.  */
  185.  
  186. #define RETURNX     -1    /* Return first argument */
  187. #define RETURNY        -3    /* Return second argument */
  188. #define    RETURNINVALID    -5    /* Return a quiet nan and set errno */
  189. #define    RETURN1        -7    /* Return +1.0. */
  190. #define    RETURNINFORZERO    -9    /* Return +inf for +inf, +0 for -inf. */
  191.  
  192. /*
  193.  *    Context save/restore info.
  194.  */
  195.  
  196. #define FPSAVESIZE    256    /* Block for stacking state of current floating point device. */
  197.  
  198. /*    68020 cache clear call 
  199.  */
  200.  
  201. #define CLEARCACHE    trap    #2
  202. @
  203.